const EventEmitter = require('events');

class TaskQueue extends EventEmitter {
    constructor() {
        super();
        this.taskQueue = [];
        this.currentTask = null;
    }

    // 添加任务到队列
    enqueueTask(func, ...args) {
        this.taskQueue.push({ func, args });
        this.processNextTask();
    }

    // 处理队列中的下一个任务
    processNextTask() {
        if (this.currentTask || this.taskQueue.length === 0) {
            // 如果有正在处理的任务或队列为空，则不执行任何操作
            return;
        }
        this.currentTask = this.taskQueue.shift();
        this.emit('task', this.currentTask);
    }

    // 当任务完成时调用
    onTaskDone() {
        this.currentTask = null;
        this.processNextTask();
    }
}

// // 创建一个任务队列实例
// const taskQueue = new TaskQueue();

// // // 监听'task'事件以处理任务
// // taskQueue.on('task', (task) => {
// //     console.log('Starting task:', task);
// //     let { func, args } = task
// //     // 假设每个任务是一个返回Promise的函数
// //     func(...args).then(() => {
// //         console.log('Task completed:', task);
// //         // 任务完成后通知队列
// //         taskQueue.emit('done', task);
// //     }).catch((error) => {
// //         console.error('Task failed:', error, task);
// //         // 可以选择停止队列或进行其他错误处理
// //         taskQueue.emit('error', error);
// //     });
// // });

// // 监听'done'事件以知道何时任务完成
// taskQueue.on('done', (task) => {
//     console.log('Task processed and ready for the next one', task);
//     taskQueue.onTaskDone()
// });

// // 监听'error'事件以处理错误
// taskQueue.on('error', (error) => {
//     console.error('An error occurred:', error);
//     // 停止队列或进行其他错误处理
// });

// // 添加任务到队列
// taskQueue.enqueueTask((arg2) => new Promise((resolve) => {
//     setTimeout(() => {
//         console.log('Task 2 executed', arg2);
//         resolve();
//     }, 5000);
// }), 2);

export { TaskQueue }